import sqlite3
import os


class DatabaseOperations:
    """SQLite数据库操作类
    
    提供一系列操作SQLite数据库的方法，包括创建数据库文件、
    连接数据库、执行SQL命令、查询数据等功能。
    """

    def __init__(self, db_path='default.db'):
        """初始化数据库操作类
        
        初始化数据库路径，不自动创建连接。
        
        Args:
            db_path: 数据库文件的路径，默认为'default.db'
        """
        self.db_path = db_path
        self.connection = None
        self.cursor = None
        self.execution_result = None

    def is_database_exists(self):
        """判断数据库文件是否存在
        
        Returns:
            如果文件存在返回True，否则返回False
        """
        return os.path.exists(self.db_path)

    def create_database_file(self):
        """创建数据库文件
        
        如果数据库文件不存在，则创建一个新的数据库文件；
        如果已存在，则提示文件已存在。
        """
        if not self.is_database_exists():
            # 创建空的数据库文件
            open(self.db_path, 'a').close()
            print(f"数据库文件 {self.db_path} 创建成功")
        else:
            print(f"数据库文件 {self.db_path} 已存在")

    def connect_database(self):
        """连接数据库文件
        
        如果数据库文件存在，则建立连接并创建游标；
        如果文件不存在，则提示无法连接。
        """
        if self.is_database_exists():
            self.connection = sqlite3.connect(self.db_path)
            self.cursor = self.connection.cursor()
            print("数据库连接成功")
        else:
            print("数据库文件不存在，无法连接")

    def execute_command(self, command):
        """执行SQL命令
        
        执行指定的SQL命令，并根据命令类型保存执行结果。
        
        Args:
            command: 字符串类型的SQL命令
            
        Returns:
            执行成功返回True，否则返回False
        """
        try:
            self.cursor.execute(command)
            self.connection.commit()
            # 如果是查询命令，保存查询结果，否则保存True表示执行成功
            self.execution_result = self.cursor.fetchall() if 'SELECT' in command else True
            return True
        except sqlite3.Error as e:
            print(f"执行命令失败: {e}")
            return False

    def get_execution_result(self):
        """获取最近一次查询操作的结果
        
        Returns:
            最近一次查询的结果，格式为元组列表
        """
        return self.execution_result

    def direct_query(self, table_name='maintable'):
        """直接查询指定表的所有数据
        
        执行SELECT * 命令查询指定表的所有数据并打印结果。
        
        Args:
            table_name: 要查询的表名，默认为'maintable'
        """
        query_command = f"SELECT * FROM `{table_name}`"
        self.execute_command(query_command)
        result = self.get_execution_result()
        for row in result:
            print(row)

    def quick_connect(self, db_path='default.db', create_table=True):
        """快速连接到数据库
        
        一站式完成数据库文件检查、创建（如果需要）、连接，
        并可选择创建默认表。
        
        Args:
            db_path: 数据库文件的路径，默认为'default.db'
            create_table: 是否创建默认表，默认为True
        """
        self.db_path = db_path
        self.create_database_file()
        self.connect_database()
        if create_table:
            # 创建默认表，包含id、key、value和type字段
            self.execute_command("""
                CREATE TABLE IF NOT EXISTS maintable 
                (id INTEGER PRIMARY KEY, 
                 key TEXT, 
                 value TEXT, 
                 type TEXT DEFAULT 'none')
            """)
        print("快速连接完成")

    def close_connection(self):
        """关闭数据库连接
        
        如果存在活跃连接，则关闭连接并重置连接和游标对象。
        """
        if self.connection:
            self.connection.close()
            self.connection = None
            self.cursor = None
            print("数据库连接已关闭")


# 使用示例
if __name__ == "__main__":
    # 创建数据库操作对象
    db_ops = DatabaseOperations()
    
    # 快速连接到数据库
    db_ops.quick_connect()
    
    # 插入数据
    db_ops.execute_command("INSERT INTO maintable (key, value) VALUES ('key1', 'value1')")
    
    # 直接查询默认表
    db_ops.direct_query()
    
    # 关闭数据库连接
    db_ops.close_connection()
